package net.hombrecero.bigbeat.client;

import net.hombrecero.bigbeat.client.model.ProjectLw;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class ProjectAux001 implements EntryPoint {
  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  // no puede haber IoC ya que esto pasa a javascript y no tenemos
  // el contenedor disponible para hacer uso de este sistema
  //
  // hacemos uso de inners-classes aka clases-anidadas
  //
  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  // hacemos uso de final para los objetos que forman la GUI
  // se obtiene un acceso simple a estos objetos desde el codigo
  // de eventos

  //objetos de utilidad
  private SrvProjectAux001Async srvProjectAux001Async;
  private ServiceDefTarget serviceDefTarget;



  final VerticalPanel   panVer              = new VerticalPanel();
    final Label           labName           = new Label(  "name: "  );
    final TextBox         txtBoxName        = new TextBox();
    final Label           labAlias          = new Label(  "alias: "  );
    final TextBox         txtBoxAlias       = new TextBox();
    final Label           labDescription    = new Label(  "description: "  );
    final TextBox         txtBoxDescription = new TextBox();
    final Label           labUrlWeb         = new Label(  "urlWeb: "  );
    final TextBox         txtBoxUrlWeb      = new TextBox();
    final Label           labUrlDoc         = new Label(  "urlDoc: "  );
    final TextBox         txtBoxUrlDoc      = new TextBox();
    final Label           labUrlTechDoc     = new Label(  "urlTechDoc: "  );
    final TextBox         txtBoxUrlTechDoc  = new TextBox();
    final Button          btnCrear          = new Button( "crear" );


  public void onModuleLoad() {
    //ajustamos llamadas ASINCRONAS a servicios
    //ajustamos llamadas ASINCRONAS a servicios
    //ajustamos llamadas ASINCRONAS a servicios
    srvProjectAux001Async = (SrvProjectAux001Async)GWT.create( SrvProjectAux001.class );
    serviceDefTarget      = (ServiceDefTarget) srvProjectAux001Async;
       //estamos en http://localhost:8080/net.hombrecero.bigbeat.client/ProjectAux001.html
       //y queremos hacer uso de http://localhost:8080/net.hombrecero.bigbeat.client//projectaux001.srv
    serviceDefTarget.setServiceEntryPoint( "projectaux001.srv" );


    //creamos la estructura de objetos GUI
    //creamos la estructura de objetos GUI
    //creamos la estructura de objetos GUI
    /*final*/ HorizontalPanel panHorAux;//              = new HorizontalPanel();
    //
    RootPanel.get( "slot1" ).add( panVer ); //a~adimos la estructura de objetos GUI en la pagina
        panHorAux = new HorizontalPanel();
        panHorAux.add( labName           );
        panHorAux.add( txtBoxName        );
      panVer.add( panHorAux );
        panHorAux = new HorizontalPanel();
        panHorAux.add( labAlias          );
        panHorAux.add( txtBoxAlias       );
      panVer.add( panHorAux );
        panHorAux = new HorizontalPanel();
        panHorAux.add( labDescription    );
        panHorAux.add( txtBoxDescription );
      panVer.add( panHorAux );
        panHorAux = new HorizontalPanel();
        panHorAux.add( labUrlWeb         );
        panHorAux.add( txtBoxUrlWeb      );
      panVer.add( panHorAux );
        panHorAux = new HorizontalPanel();
        panHorAux.add( labUrlDoc         );
        panHorAux.add( txtBoxUrlDoc      );
      panVer.add( panHorAux );
        panHorAux = new HorizontalPanel();
        panHorAux.add( labUrlTechDoc     );
        panHorAux.add( txtBoxUrlTechDoc  );
      panVer.add( panHorAux );
      panVer.add( btnCrear               );

      //eventos GUI
      //eventos GUI
      //eventos GUI
      //a~adimos el evento del clik del boton
      btnCrear.addClickListener(
                      new ClickListener() {
                          public void onClick( Widget widget ) {
                              // TODO 4llonqui completar/mejorar/terminar esta funcion
                              ProjectLw projectLw = new ProjectLw();
                              projectLw.setName( txtBoxName.getText() );
                              projectLw.setAlias( txtBoxAlias.getText() );
                              projectLw.setDescription( txtBoxDescription.getText() );

                              srvProjectAux001Async.createProject( projectLw, asyncCallback );
                          }
                      }
      );

  }


  //trabajos GUI post llamadas asincronas
  //trabajos GUI post llamadas asincronas
  //trabajos GUI post llamadas asincronas
  private AsyncCallback asyncCallback = new AsyncCallback() {
      public void onFailure( Throwable caught ) {
        //muestraInfo( "Error during invocation of the calculator service:" + caught );
      }

      public void onSuccess( Object result ) {
        // TODO 4llonqui completar/mejorar/terminar esta funcion
        //muestraInfo( "JEJE: " + ((String)result).toString() );
        ProjectLw projectLw = (ProjectLw)result;

        txtBoxName.setText( projectLw.getName() );
        txtBoxAlias.setText( projectLw.getAlias() );
        txtBoxDescription.setText( projectLw.getDescription() );

      }
  };


}
